<?php
namespace model;

class BlogModel {
    public $applicationModel;   //anropas av blogView så då måste den sättas till public


    /**
    * __constructor
    */
    public function __construct() {
        $this->applicationModel = new \model\ApplicationModel();
    }


    /**
    * @return array $result
    *
    * här returneras alla aktuella blogposter som finns i databasen
    */
    public function returnAllBlogs() {
        $this->applicationModel->dbModel->connect();
        $result = mysql_query("SELECT * FROM blogposts ORDER BY id DESC  LIMIT 30");
        $this->applicationModel->dbModel->close();
        return $result;
    }


   /**
    * @param string $id
    * @return array
    *
    * här returneras en specifik blogpost från databasen
    */
    public function returnSpecificBlog($id) {
        $this->applicationModel->dbModel->connect();
        $result = mysql_query("SELECT * FROM blogposts WHERE id='".$id."'");
        $this->applicationModel->dbModel->close();

        $blogHeader ="";
        $blogText ="";
        $blogDate ="";
        $blogUser ="";

        while($row = mysql_fetch_array($result)) {
            $blogHeader =$row[1];
            $blogText =$row[2];
            $blogDate =$row[3];
            $blogUser =$row[4];
        }

        return array ($id, $blogHeader, $blogText, $blogDate, $blogUser);
    }


    /**
    * @param string $blogHeader
    * @param string $blogText
    * @param string $blogDate
    * @param string $blogUser
    *
    * här lägger vi till en blogpost i databasen
    */
    public function addBlogToDatabase($blogHeader , $blogText, $blogDate,$blogUser) {
         $this->applicationModel->dbModel->connect();
         mysql_query("INSERT INTO blogposts (header, text, date, user) VALUES ('"
         . $blogHeader ."', '". $blogText. "' , '". $blogDate ."', '" .$blogUser. "' )");
         $this->applicationModel->dbModel->close();
         $_SESSION[$this->applicationModel->m_sessionRegisteredBlogPostOK] = true;
    }


    /**
    * @return bolean
    *
    * här kollar vi om användaren lyckats att skapa en blogpost
    */
    public function hasRegisteredBlogPost() {
        if (isset($_SESSION[$this->applicationModel->m_sessionRegisteredBlogPostOK]) ) {
            if($_SESSION[$this->applicationModel->m_sessionRegisteredBlogPostOK] == true) {
                $_SESSION[$this->applicationModel->m_sessionRegisteredBlogPostOK] = false;
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }


    /**
    * @param string $id
    *
    * tar bort blogpost från databasen
    */
    public function removeBlogFromDatabase($id) {
        $this->applicationModel->dbModel->connect();
        mysql_query("DELETE FROM blogposts WHERE id='".$id."'");
        mysql_query("DELETE FROM comments WHERE blogpostId='".$id."'");
        $this->applicationModel->dbModel->close();
    }


    /**
    * @param string $id
    * @param string $updatedBlogPostHeader
    * @param string $updatedBlogPostText
    *
    * här uppdateras blogposten i databasen
    */
    public function updateBlogPostInDatabase($id, $updatedBlogPostHeader, $updatedBlogPostText) {
        $this->applicationModel->dbModel->connect();
        mysql_query("UPDATE blogposts SET header='". $updatedBlogPostHeader ."' WHERE id ='$id'");
        mysql_query("UPDATE blogposts SET text='". $updatedBlogPostText ."' WHERE id ='$id'");
        $this->applicationModel->dbModel->close();
        $_SESSION[$this->applicationModel->m_sessionUpdatedBlogPostOK] = true;
    }

    /**
    * @return bolean
    *
    * här kollar vi om användaren uppdaterat blogpost
    */
    public function hasUpdatedBlogPost() {

        if (isset($_SESSION[$this->applicationModel->m_sessionUpdatedBlogPostOK]) ) {
            if($_SESSION[$this->applicationModel->m_sessionUpdatedBlogPostOK] == true) {
                $_SESSION[$this->applicationModel->m_sessionUpdatedBlogPostOK] = false;
                return true;
            } else {
                return false;
            }
       } else {
         return false;
       }
    }


    /**
    * @return bolean
    *
    * här kollas om blogpostens överskrift är tillräckligt lång
    */
    public function isBlogHeaderToShort($header) {
        if (strlen($header) < $this->applicationModel->m_minNumberBlogHeader) {
           return true;
        }
        else {
            return false;
        }
    }


    /**
    * @param string $text
    * @return bolean
    * här kollas om blogposten är tillräckligt lång
    */
    public function isBlogTextToShort($text) {
       if (strlen($text) < $this->applicationModel->m_minNumberBlogText) {
           return true;
       }
       else {
        return false;
       }
    }


    /**
    * @param string $text
    * @return bolean
    *
    * här kollas om blogposten är för lång
    */
    public function isBlogTextToLong($text) {
       if (strlen($text) > $this->applicationModel->m_maxNumberBlogText) {
           return true;
       }
       else {
        return false;
       }
    }


    /**
    * @param string $text
    * @return bolean
    *
    * här kollas om blogposten innehåller felaktiga tecken tex <>
    */
    public function hasBlogTextInvalidChars($text) {
       if (preg_match("/<[^<]+>/",$text,$m) == 1) {                         //<-preg_match() inbyggd metod som kollar regEx
           return true;
       }
       else {
        return false;
       }
    }


}

